package control;

import java.sql.SQLException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.Usuario;
import utils.Constantes;
import dao.UsuarioDao;

public class GenericControl extends HttpServlet{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Usuario logado;
	private HttpServletRequest request;
	private HttpServletResponse response;
	private Paginacao paginacao;
	
	

	public void setLogado(Usuario usuario) {
		this.setAtributoSession(Constantes.LOGADO, usuario);
		if ((usuario !=null) && ((usuario.getId() == 1)||(usuario.getId() == 2)))
			this.setAtributoSession(Constantes.PERMISSAO, "S");
		else
			this.setAtributoSession(Constantes.PERMISSAO, "N");
		this.logado = usuario;
	}


	public Usuario getLogado() {
		
		if (this.logado==null){
			Usuario usuario = null;
			usuario = (Usuario) this.getAtributoSession(Constantes.LOGADO);
	//		System.out.println(this.getSession().getId());
			if (usuario == null)
				Dispatcher.showScreen(request, response);
			
			UsuarioDao fDao = new UsuarioDao();
			try {
				usuario = fDao.getUsuario(usuario.getLogin(), usuario.getSenha());
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			this.setLogado(usuario);
	//		if ((usuario !=null) && ((usuario.getId() == 1)||(usuario.getId() == 2))){
	//			this.setAtributoSession(Constantes.PERMISSAO, "S");
	//		}
			return usuario;
		}
		else return this.logado;
	}
	


	public void setAtributoRequest(String name,Object atributo){
		HttpServletRequest request = this.getRequest();
		request.setAttribute(name, atributo);
	}
	public Object getAtributoRequest(String name){
		return request.getAttribute(name);
	}
	public void setAtributoSession(String name,Object atributo){
		this.getSession().setAttribute(name, atributo);
	}
	public Object getAtributoSession(String name){
		return this.getSession().getAttribute(name);
	}
	public void removeAtributoSession(String name){
		this.getSession().removeAttribute(name);
	}


	public void setRequest(HttpServletRequest request) {
		this.request = request;
	}


	public HttpServletRequest getRequest() {
		return request;
	}


	public void setResponse(HttpServletResponse response) {
		this.response = response;
	}


	public HttpServletResponse getResponse() {
		return response;
	}


	public HttpSession getSession() {
		return request.getSession();
	}

	public Paginacao getPaginacao() {
		if (paginacao==null) paginacao = new Paginacao(this.getRequest());
		return paginacao;
	}



}
